package com.qing.common.utils.sm;

import cn.hutool.core.util.HexUtil;
import cn.hutool.crypto.SmUtil;
import cn.hutool.crypto.digest.SM3;

import java.nio.charset.StandardCharsets;

/**
 * @author guoqf
 */
public class Sm3Utils {

    public static void main(String[] args) {

        testSm3DigestSimple();

    }

    private static void testSm3DigestSimple() {
        String source = "123456781234567812345678123456781234567812345678123456789";
        System.out.println("testSm3DigestSimple:  " + sm3Digest(source));
    }


    public static String sm3Digest(String source) {
        byte[] data = source.getBytes(StandardCharsets.UTF_8);
        // 创建SM3摘要工具
        SM3 sm3 = new SM3();
        // 使用SM3摘要工具对数据做摘要
        byte[] digest = sm3.digest(data);
        return HexUtil.encodeHexStr(digest);
    }

    public static boolean sm3Digest(String source, byte[] recvDigest) {
        byte[] data = source.getBytes(StandardCharsets.UTF_8);
        // 创建SM3摘要工具
        SM3 sm3 = new SM3();
        // 使用SM3摘要工具对数据做摘要
        byte[] digest = sm3.digest(data);
        // 将新生成的摘要和接收到的摘要对比
        if (digest.length == recvDigest.length) {
            for (int i = 0; i < digest.length; i++) {
                if (digest[i] != recvDigest[i]) {
                    return false;
                }
            }
            return true;
        }
        return false;


//        return digest;
    }


    public static String sm3DigestSalt(String source) {
        byte[] data = source.getBytes(StandardCharsets.UTF_8);
        String s = "12345";
        byte[] salt = s.getBytes(StandardCharsets.UTF_8);
        // 使用盐值创建SM3摘要工具
        SM3 sm3 = new SM3(salt);
        // 使用SM3摘要工具对数据做摘要
        byte[] digest = sm3.digest(data);
        return SmUtil.sm3WithSalt(new byte[32]).digestHex(source);
    }
}
